solution-card 轻卡片列表

solution-card 轻卡片列表

iov-solution-card 轻卡片列表组件,iov-ui@1.2.38起支持。

属性说明

属性名 类型 默认值 必填 说明
data Object 当前列表的数据
class-name String 自定义class
openIndex Number 0 默认展开的下标
index Number 当前列表的index
voiceText Array 当前列表的语音提示
vtsTag string 所见即所说2.0泛化扩展,多个使用“
type String 当前列表是什么类型的卡片
tagType Array 当列表为停车时展示的tag
bindchange Event 点击展开的回调
bindtext Event 点击“导航”、“下单”的回调

data参数说明

属性名 类型 默认值 必填 说明
name String 标题
distance/displayDistance String 距离
price String 价格
address String 地址
feeStrategy Array 停车场说明
remainingNumber String 剩余车位
remainingStatus String 车位状态(车位状态 4充足 3较少 2紧张 1 没有或者不确定 文档https://ku.baidu-int.com/knowledge/HFVrC7hq1Q/FPr6PDpOZ4/8qkyNLVtJZ/12c6726a047a46)

json window说明

属性名 类型 默认值 必填 说明
left Number 距离左边的坐标
top Number 距离上边的坐标
right Number 距离右边的坐标
bottom Number 距离下边的坐标
showStyle Number 1:列表 2:小卡片

示例

json:

{
    "navigationBarTitleText": "",
    "usingComponents": {
        "iov-solution-card": "iov-ui/lib/solution-card"
    },
    "window": {
        "left": 0,
        "top": 0,
        "right": 580,
        "bottom": 960,
        "showStyle":1
    }
}

swan:

<iovauto-vsl bindOnRefresh="onRefresh" class="container">
    <scroll-view
        class="scroll-view"
        bindscroll="onScroll"
        scroll-y
        scroll-top="{= scrollTop =}"
        scroll-with-animation="true"
    >   
        <iov-solution-card
            s-for="item,index in cardData"
            data="{{ item }}"
            voice-url="{{ item.url || item.clickUrl }}"
            voice-index="{{ index + 1 }}"
            bindvsl="onChange"
            bindchange="onChange"
            index="{{ index + 1 }}"
            type="parking"
            adapter="{{ adapter }}"
            voiceText="{{ voiceText }}"
            openIndex="{{ openIndex }}"
            tagType="{{['其它','未知','紧张','较少','充足']}}"
        >
        </iov-solution-card>
        <view s-if="openIndex" style="height: 522/100rem;"></view>
    </scroll-view>
</iovauto-vsl>

js:

/* globals Page, swan */
import mock from './mock';
import extendPage from '../../../utils/basePage';
Page(extendPage({
    data: {
        voiceText: ['导航'],
        scrollTop: 0,
        adapter: {id: 'parkingLotId', name: 'parkingName', total: 'totalNumber'},
        cardData: null,
        openIndex: -1
    },
    onInit(query) {
        this.setQuery(query);
    },
    onRefresh(query) {
        this.setQuery(query);
    },
    setQuery(query) {
        // mock 数据
        // query = mock.nav;
        // query = mock.select;
        if (!query || Object.keys(query) <= 0) {
            return;
        }
        // eslint-disable-next-line no-param-reassign
        const data = JSON.parse(query.data).data;
        if (!data || Object.keys(data) <= 0) {
            return;
        }
        // cmd [select:选择第几个 nav:导航第几个 parkingList:列表]
        if (data.cmd && this[data.cmd]) {
            const {parkingLotId} = data;
            const list = data.list || this.data.cardData || [];
            const index = list.findIndex(item => {
                return parkingLotId === item.parkingLotId;
            });
            this[data.cmd](index, list);
        }
    },
    parkingList(index, list) {
        if (!(index > 0)) {
            list[0].open = true;
        }
        this.setData({
            openIndex: 0,
            cardData: list
        });
        this.addMarker();
    },
    nav(index, list) {
        const currList = list[index];
        const {latitude, longitude, address} = currList;
        swan.iovauto.openNavigation && swan.iovauto.openNavigation(latitude + '', longitude + '', address);
    },
    select(index) {
        this.onChange({detail: {value: index}});
    },
    onChange(e) {
        console.log('onChange...', e);
    },
    onScroll() {
        console.log('onScroll...', e);
    },
    // 地图扎点
    addMarker(e) {
        const {cardData, openIndex} = this.data;
        let i = cardData.length - openIndex < 4 ? cardData.length - 4 : openIndex;
        let markerData = cardData.slice(i, i + 4);
        markerData = markerData.map((item, index) => {
            return {
                poiTag: index + 1,
                name: item.parkingName,
                address: item.address,
                longitude: item.longitude,
                latitude: item.latitude
            };
        });
        swan.iovauto.addMarker
            && swan.iovauto.addMarker({
                data: {
                    list: markerData
                }
            });
    }
}));

mock.js:

/*eslint-disable*/
const list = [
    {
        resources: '0',
        remainingStatus: 4,
        remainingNumber: 0,
        totalNumber: 200,
        longitude: '114.23456',
        latitude: '22.23456',
        parkingLotId: 'id1234',
        parkingName: '1onInit测试停车场',
        avgCost: '2元/小时',
        address: '深圳市南山区百度国际附近',
        distance: '245.77m',
        feeStrategy: [],
        url: 'dumi://xxxxxxxxxx'
    }
];
export default {
    list,
    parkingList: {
        data:
            '{"code":1,"msg":"success","log_id":"","data":{"cmd":"parkingList","appkey":"33Tk2jep4GiKEEqvaHSmgc17j4wz0oI9","path":"/pages/card/list","list": ' +
            JSON.stringify(list) +
            '}}'
    },
    select: {
        data: '{"code":1,"msg":"success","log_id":"","data":{"cmd":"select","appkey":"33Tk2jep4GiKEEqvaHSmgc17j4wz0oI9","path":"/pages/card/list","parkingLotId":"id144238"}}'
    },
    nav: {
        data: '{"code":1,"msg":"success","log_id":"","data":{"cmd":"nav","appkey":"33Tk2jep4GiKEEqvaHSmgc17j4wz0oI9","path":"/pages/card/list","parkingLotId":"id1235"}}'
    }
};
error-page 错误页面手百小程序快速接入